package com.demo.java.OD151_200.OD172;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【能力组队 or 求最多可以派出多少支团队】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145785688
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(); // 成员数
        int[] nums = new int[n]; // 存储成员的能力值
        for (int i = 0; i < n; i++) {
            nums[i] = scanner.nextInt();
        }
        int m = scanner.nextInt(); // 每个团队的能力值要求

        Arrays.sort(nums); // 排序能力值

        if (nums[0] >= m) { // 如果最弱成员的能力值都足够大
            System.out.println(n); // 每个成员都可以单独组成团队
        } else {
            int left = 0, right = n - 1; // 左右指针
            int ans = 0; // 最终可以组成的团队数量

            while (left < right) { // 双指针遍历
                if (nums[right] >= m) { // 如果最强成员的能力值满足要求
                    right--;
                    ans++; // 组成一个团队
                } else if (nums[right] + nums[left] >= m) { // 强弱组合
                    left++;
                    right--;
                    ans++; // 组成一个团队
                } else { // 如果组合不成一个团队，较弱成员单独处理
                    left++;
                }
            }

            System.out.println(ans); // 输出最大团队数
        }
    }
}